# 可变数据类型：list/dict/set，值改变，内存地址不会改变。总结意思就是，程序允许该内存地址的值发生改变。
# 不可变数据类型，number/str/tuple/bool  程序不允许内存地址对应的值被修改

# 借助 id() 函数来查看变量的内存地址

# 明确三个原则
# 变量不存储值，只存储值对应的内存地址  i = 123 print(i)
# 数据一旦声明，就会确定其内存地址，每个值都有其对应的内存地址
# dict/list/set， 这三种数据类型声明时，都会重新创建内存地址

# i = 1
# p = 1
# print(id(i))
# print(id(p))
# print(id(1))

# i = [1]
# p = [1]
# print(id(i))
# print(id(p))
# print(i)
# print(p)
#
# i[0] = 123
# p[0] = 321
# i.append(111)
# p.append(222)
# print(id(i))
# print(id(p))
#
# print(i)
# print(p)

# 变量赋值的实质: 引用
# 引用: 就是引用其内存地址

# a = 123
# b = a
#
# print(a)
# print(b)

# lst1 = []
# lst2 = lst1
#
# lst1.append(1)
#
# print(lst1)
# print(lst2)

# classmete = []  # 内存地址 100
#
# print(id(classmete))
#
# classes = {
#     "name": "三年二班",
#     "classmate": classmete  # 100
# }
#
# classmete.append("张三1")
# classmete.append("张三2")
# classmete.append("张三3")
# classmete.append("张三4")
# print(id(classmete))
# print(classes)